package juanca.mole;

import java.util.ArrayList;
import java.util.Calendar;

import java.util.HashMap;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import ClasesExtras.GetIpAddress;
import ClasesExtras.ManejadorCampos;
import ClasesExtras.ValidacionCampos;
import ClasesExtras.handlerAlertMessage;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import com.savagelook.android.JsonHelper;

@SuppressLint("SimpleDateFormat")
public class EntregaMercancia extends Activity {

	private int fAno;
	private int fMes;
	private int fDia;
	private int hMinuto;
	private int hHora;
	private String fechaUsuario;
	private String tiempoUsuario;
	private String fechaSistema;
	private String tiempoSistema;
	private String idDestinatario;
	private String destinatario;
	private String NumFactura;
	private String Cantidad;
	private String quienRecibe;
	private String loteDelProducto;
	private String productos;
	private String referencias;
	private String idEmpleado;
	private String passwEmpleado;
	private String IdOperarioEmpleado;
	private String date;
	private String time;

	private HashMap<String, Integer> idProducto;

	private String URL_REGISTRO_ENTREGA_MERCANCIA;
	private String URL_PRODUCTOS;
	private String URL_REFERENCIAS_EMPAQUES;
	private String URL_VALIDAR_USUARIO;
	public static final int DATE_DIALOG_ID = 0;
	public static final int TIME_DIALOG_ID = 1;
	public static final String STRING_EMPTY = "";
	private static final String CNV = "cnv";
	private static final String PNV = "pnv";
	private static final String no_permiso = "no_permiso";
	public ValidacionCampos validarcampos = new ValidacionCampos();
	public ProgressDialog progressDialog;
	public ProgressDialog pd;

	private Button btnRegistrarEntregaMerca;
	private Spinner spiProductos;
	private Spinner Spireferencia;
	private TextView tvDestinatario;
	private EditText etCantEntMer;
	private EditText etNoFactEntMer;
	private EditText etQuienRecibe;
	private EditText etLoteDelProducto;
	private ManejadorCampos manejador;
	private handlerAlertMessage manejadorMensajes;
	private Activity activity;

	public EntregaMercancia self = this;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_entrega_mercancia);
		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

		tvDestinatario = (TextView) findViewById(R.id.tvDestinatario);
		etCantEntMer = (EditText) findViewById(R.id.etCantEntMer);
		etNoFactEntMer = (EditText) findViewById(R.id.etNoFactEntMer);
		etQuienRecibe = (EditText) findViewById(R.id.etQuienRecibe);
		etLoteDelProducto = (EditText) findViewById(R.id.etLoteDelProducto);
		spiProductos = (Spinner) findViewById(R.id.spiProdEntMet);
		Spireferencia = (Spinner) findViewById(R.id.spiRefeEntMer);
		btnRegistrarEntregaMerca = (Button) findViewById(R.id.btnRegistrarEntregaMerca);
		manejadorMensajes = new handlerAlertMessage();
		manejador = new ManejadorCampos();
		activity = this;

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {
			URL_REGISTRO_ENTREGA_MERCANCIA = direccion.getDireccion()
					+ "/registros_mercancia_reparto.json";
			URL_PRODUCTOS = direccion.getDireccion() + "/productos.json";
			URL_REFERENCIAS_EMPAQUES = direccion.getDireccion()
					+ "/referencia_productos.json";
			URL_VALIDAR_USUARIO = direccion.getDireccion() + "/validar.json";

			pd = ProgressDialog.show(this, null,
					this.getString(R.string.PbMsjCargando), true, true);
			new Thread(new Runnable() {
				@Override
				public void run() {
					self.mostrarProducto(URL_PRODUCTOS);
					Log.i("EntregaMercancia", "carga productos");

				}
			}).start();

			new Thread(new Runnable() {
				@Override
				public void run() {
					self.mostrarReferencia(URL_REFERENCIAS_EMPAQUES);
					Log.i("EntregaMercancia", "carga Referencias");
					pd.dismiss();

				}
			}).start();
		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	@Override
	protected void onResume() {
		super.onResume();

		Bundle bundle = new Bundle();
		bundle = getIntent().getExtras();

		if (bundle != null) {
			String[] datoCliente = new String[2];
			datoCliente = bundle.getStringArray("datoCliente");
			this.setIdDestinatario(datoCliente[0]);
			this.setDestinatario(datoCliente[1]);
			tvDestinatario.setText(" " + this.getDestinatario());

		}
	}

	/**
	 * @return the loteDelProducto
	 */
	public String getLoteDelProducto() {
		return loteDelProducto;
	}

	/**
	 * @param loteDelProducto
	 *            the loteDelProducto to set
	 */
	public void setLoteDelProducto(String loteDelProducto) {
		this.loteDelProducto = loteDelProducto;
	}

	/**
	 * @return the quienRecibe
	 */
	public String getQuienRecibe() {
		return quienRecibe;
	}

	/**
	 * @param quienRecibe
	 *            the quienRecibe to set
	 */
	public void setQuienRecibe(String quienRecibe) {
		this.quienRecibe = quienRecibe;
	}

	/**
	 * @return the idOperarioEmpleado
	 */
	public String getIdOperarioEmpleado() {
		return IdOperarioEmpleado;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = time;
	}

	/**
	 * @param idOperarioEmpleado
	 *            the idOperarioEmpleado to set
	 */
	public void setIdOperarioEmpleado(String idOperarioEmpleado) {
		IdOperarioEmpleado = idOperarioEmpleado;
	}

	/**
	 * @return the idEmpleado
	 */
	public String getIdEmpleado() {
		return idEmpleado;
	}

	/**
	 * @param idEmpleado
	 *            the idEmpleado to set
	 */
	public void setIdEmpleado(String idEmpleado) {
		this.idEmpleado = idEmpleado;
	}

	/**
	 * @return the passwEmpleado
	 */
	public String getPasswEmpleado() {
		return passwEmpleado;
	}

	/**
	 * @param passwEmpleado
	 *            the passwEmpleado to set
	 */
	public void setPasswEmpleado(String passwEmpleado) {
		this.passwEmpleado = passwEmpleado;
	}

	/**
	 * @return the referencias
	 */
	public String getReferencias() {
		return referencias;
	}

	/**
	 * @param referencias
	 *            the referencias to set
	 */
	public void setReferencias(String referencias) {
		this.referencias = referencias;
	}

	/**
	 * @return the productos
	 */
	public String getProductos() {
		return productos;
	}

	/**
	 * @param productos
	 *            the productos to set
	 */
	public void setProductos(String productos) {
		this.productos = productos;
	}

	/**
	 * @return the idDestinatario
	 */
	public String getIdDestinatario() {
		return idDestinatario;
	}

	/**
	 * @param idDestinatario
	 *            the idDestinatario to set
	 */
	public void setIdDestinatario(String idDestinatario) {
		this.idDestinatario = idDestinatario;
	}

	/**
	 * @return the fechaUsuario
	 */
	public String getFechaUsuario() {
		return fechaUsuario;
	}

	/**
	 * @param string
	 *            the fechaUsuario to set
	 */
	public void setFechaUsuario(String string) {
		this.fechaUsuario = string;
	}

	/**
	 * @return the tiempoUsuario
	 */
	public String getTiempoUsuario() {
		return tiempoUsuario;
	}

	/**
	 * @param string
	 *            the tiempoUsuario to set
	 */
	public void setTiempoUsuario(String string) {
		this.tiempoUsuario = string;
	}

	/**
	 * @return the fechaSistema
	 */
	public String getFechaSistema() {
		return fechaSistema;
	}

	/**
	 * @param fechaSistema
	 *            the fechaSistema to set
	 */
	public void setFechaSistema(String fechaSistema) {
		this.fechaSistema = fechaSistema;
	}

	/**
	 * @return the tiempoSistema
	 */
	public String getTiempoSistema() {
		return tiempoSistema;
	}

	/**
	 * @param tiempoSistema
	 *            the tiempoSistema to set
	 */
	public void setTiempoSistema(String tiempoSistema) {
		this.tiempoSistema = tiempoSistema;
	}

	/**
	 * @return the destinatario
	 */
	public String getDestinatario() {
		return destinatario;
	}

	/**
	 * @param destinatario
	 *            the destinatario to set
	 */
	public void setDestinatario(String destinatario) {
		this.destinatario = destinatario;
	}

	/**
	 * @return the numFactura
	 */
	public String getNumFactura() {
		return NumFactura;
	}

	/**
	 * @param numFactura
	 *            the numFactura to set
	 */
	public void setNumFactura(String numFactura) {
		NumFactura = numFactura;
	}

	/**
	 * @return the cantidad
	 */
	public String getCantidad() {
		return Cantidad;
	}

	/**
	 * @param cantidad
	 *            the cantidad to set
	 */
	public void setCantidad(String cantidad) {
		Cantidad = cantidad;
	}

	@SuppressWarnings("deprecation")
	public void fechaEntMerc(View v) {
		final Calendar c = Calendar.getInstance();
		fAno = c.get(Calendar.YEAR);
		fMes = c.get(Calendar.MONTH);
		fDia = c.get(Calendar.DAY_OF_MONTH);
		showDialog(DATE_DIALOG_ID);
	}

	@SuppressWarnings("deprecation")
	public void horaEntMerc(View v) {
		final Calendar c = Calendar.getInstance();
		hHora = c.get(Calendar.HOUR_OF_DAY);
		hMinuto = c.get(Calendar.MINUTE);
		showDialog(TIME_DIALOG_ID);

	}

	@SuppressLint("SimpleDateFormat")
	private TimePickerDialog.OnTimeSetListener showtime = new TimePickerDialog.OnTimeSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			hHora = hourOfDay;
			hMinuto = minute;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(hHora).append(":")
					.append(hMinuto);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			self.setTime((hHora + ":" + hMinuto).toString());

			setTiempoUsuario(self.getTime());

		}
	};

	private DatePickerDialog.OnDateSetListener showdate = new DatePickerDialog.OnDateSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			fAno = year;
			fMes = monthOfYear + 1;
			fDia = dayOfMonth;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(fDia).append("-")
					.append(fMes).append("-").append(fAno);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			self.setDate((fDia + "-" + fMes + "-" + fAno + "-").toString());

			setFechaUsuario(self.getDate());

		}
	};

	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case TIME_DIALOG_ID:
			return new TimePickerDialog(this, showtime, hHora, hMinuto, true);

		case DATE_DIALOG_ID:
			return new DatePickerDialog(this, showdate, fAno, fMes, fDia);
		}
		return null;
	}

	/* Metodo que captura la fecha y la hora del sistema */
	@SuppressLint("SimpleDateFormat")
	public void fechaHoraSistema() {
		final Calendar c = Calendar.getInstance();
		int ano = c.get(Calendar.YEAR);
		int mes = c.get(Calendar.MONTH) + 1;
		int dia = c.get(Calendar.DAY_OF_MONTH);
		int hora = c.get(Calendar.HOUR_OF_DAY);
		int minuto = c.get(Calendar.MINUTE);

		String date = (dia + "-" + mes + "-" + ano + "-").toString();
		String time = (hora + ":" + minuto).toString();

		this.setFechaSistema(date);
		this.setTiempoSistema(time);

	}

	/* Spinner de productos */
	public void mostrarProducto(String urlProductos) {

		idProducto = new HashMap<String, Integer>();

		JSONObject productosJson;
		JSONArray productosJsonArray;
		try {
			productosJsonArray = JsonHelper.getJsonArrayFromUrl(urlProductos);
			final ArrayAdapter<String> Lista_Productos = new ArrayAdapter<String>(
					this, android.R.layout.simple_spinner_item);

			if (productosJsonArray.length() != 0) {
				for (int j = 0; j < productosJsonArray.length(); j++) {
					productosJson = productosJsonArray.getJSONObject(j);
					Lista_Productos.add(productosJson.getString("nombre"));
					idProducto.put(productosJson.getString("nombre"),
							Integer.parseInt(productosJson.getString("id")));

				}

				runOnUiThread(new Runnable() {
					public void run() {
						Lista_Productos
								.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
						spiProductos.setAdapter(Lista_Productos);

					}
				});
			} else {

				/*
				 * hilo que muestra el mensaje de error de conexion al cargar
				 * los datos
				 */
				runOnUiThread(new Runnable() {
					public void run() {

						btnRegistrarEntregaMerca.setEnabled(false);
						pd.dismiss();

						AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
								activity);
						mensajeEmergente
								.setIcon(android.R.drawable.ic_dialog_alert);
						mensajeEmergente.setTitle(R.string.tituloError);
						mensajeEmergente
								.setMessage(R.string.msjERNoHayProductos);
						mensajeEmergente.setNeutralButton(R.string.btnAceptar,
								new DialogInterface.OnClickListener() {

									public void onClick(DialogInterface dialog,
											int which) {
										Intent intent = new Intent();
										intent.setClass(activity, Etapas.class);
										startActivity(intent);

									}
								});

						mensajeEmergente.create();
						mensajeEmergente.show();
					}
				});
			}
		} catch (Exception e) {
			Log.e("BuscaClientes",
					"Error al cargar los productos, Error: "
							+ e.fillInStackTrace());

			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					pd.dismiss();
					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente
							.setMessage(R.string.msjERConexionCargarProductos);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});

		}

	}

	/* Spinner de referencia */
	public void mostrarReferencia(String urlRef) {

		JSONObject ReferenciasObjet;
		JSONArray ReferenciasJsonArray;
		final ArrayList<String> referencias = new ArrayList<String>();

		try {
			ReferenciasJsonArray = JsonHelper.getJsonArrayFromUrl(urlRef);
			ReferenciasObjet = new JSONObject();

			if (ReferenciasJsonArray.length() != 0) {

				for (int i = 0; i < ReferenciasJsonArray.length(); i++) {

					ReferenciasObjet = ReferenciasJsonArray.getJSONObject(i);
					String ref = ReferenciasObjet.getString("nombre");
					referencias.add(ref);
				}

				runOnUiThread(new Runnable() {
					public void run() {
						ArrayAdapter<String> adapter = new ArrayAdapter<String>(
								self, android.R.layout.simple_spinner_item,
								referencias);
						adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
						Spireferencia.setAdapter(adapter);

					}
				});

			} else {

				/*
				 * hilo que muestra el mensaje de error de conexion al cargar
				 * los datos
				 */
				runOnUiThread(new Runnable() {
					public void run() {

						btnRegistrarEntregaMerca.setEnabled(false);
						pd.dismiss();

						AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
								activity);
						mensajeEmergente
								.setIcon(android.R.drawable.ic_dialog_alert);
						mensajeEmergente.setTitle(R.string.tituloError);
						mensajeEmergente
								.setMessage(R.string.msjERNoHayReferenciasEmpaq);
						mensajeEmergente.setNeutralButton(R.string.btnAceptar,
								new DialogInterface.OnClickListener() {

									public void onClick(DialogInterface dialog,
											int which) {
										Intent intent = new Intent();
										intent.setClass(activity, Etapas.class);
										startActivity(intent);

									}
								});

						mensajeEmergente.create();
						mensajeEmergente.show();
					}
				});
			}

		} catch (Exception e) {
			Log.e("BuscaClientes",
					"Error al cargar las Referencias de empaques, Error: "
							+ e.fillInStackTrace());

			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {
					pd.dismiss();

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente
							.setMessage(R.string.msjERConexionCargarReferencias);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});

		}

	}

	/*
	 * metodo que crear una ventana emergente para registrar el codigo y
	 * contrasena
	 */
	public void mensajeRegistro() {

		AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(this);
		LayoutInflater inflater = this.getLayoutInflater();
		final View Inflator = inflater
				.inflate(R.layout.registro_empleado, null);
		final EditText ed1 = (EditText) Inflator
				.findViewById(R.id.etIdeEmpleado);
		final EditText ed2 = (EditText) Inflator
				.findViewById(R.id.etPasswEmpleado);
		mensajeEmergente.setTitle(R.string.msjValidarRegistro);
		mensajeEmergente.setView(Inflator);
		mensajeEmergente.setPositiveButton(R.string.btnRegistrar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						setIdEmpleado(ed1.getText().toString());
						setPasswEmpleado(ed2.getText().toString());

						if (!self.getIdEmpleado().equals(STRING_EMPTY)
								&& !self.getPasswEmpleado()
										.equals(STRING_EMPTY)) {

							progressDialog = new ProgressDialog(self);
							progressDialog.setMessage(self
									.getString(R.string.PbMsjRegistrandoEntrega));
							progressDialog.setCancelable(true);
							progressDialog.show();

							new Thread(new Runnable() {
								@Override
								public void run() {
									validarUsuario();
									Log.i("BuscaClientes",
											"entra validar usuario");

								}
							}).start();

						} else {
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjIdPasswInvali,
									R.string.btnAceptar);

						}
					}
				});

		mensajeEmergente.setNegativeButton(R.string.btnCancelar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				});
		mensajeEmergente.create();
		mensajeEmergente.show();

	}

	// valida si los campos de usuario estan vacios
	public void validarUsuario() {

		String ced = this.getIdEmpleado();
		String pass = this.getPasswEmpleado();

		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_VALIDAR_USUARIO);// operarios
		post.setHeader("content-type", "application/json");

		try {

			// Construimos el objeto en formato JSON
			JSONObject dato = new JSONObject();
			dato.put("cedula", ced);// cedula del operario
			dato.put("password", pass);// contrasena del operario
			dato.put("formulario", "f_entrega_mercancia");// permisos

			StringEntity entity = new StringEntity(dato.toString());
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			this.setIdOperarioEmpleado(EntityUtils.toString(resp.getEntity()));

			if (this.getIdOperarioEmpleado().equals(CNV)) {
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCedulaIncorrecta,
								R.string.btnAceptar);

					}
				});

			} else {
				if (this.getIdOperarioEmpleado().equals(PNV)) {
					runOnUiThread(new Runnable() {
						public void run() {
							progressDialog.dismiss();
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjPasswordIncorrecta,
									R.string.btnAceptar);

						}
					});

				} else {

					if (this.getIdOperarioEmpleado().equals(no_permiso)) {
						runOnUiThread(new Runnable() {
							public void run() {
								progressDialog.dismiss();
								manejadorMensajes.alertMessageOneButton(
										activity, R.string.tituloAlerta,
										R.string.msjSinPermisos,
										R.string.btnAceptar);

							}
						});
					} else {

						new Thread(new Runnable() {
							@Override
							public void run() {
								self.enviarDatos();
								Log.i("BuscaClientes",
										"Finaliza envio basedatos");

							}
						}).start();

					}

				}

			}

		} catch (Exception ex) {

			Log.e("BuscaClientes",
					"Salta a la exepcion al Entra a validar el usuario, Error: "
							+ ex.fillInStackTrace());
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					progressDialog.dismiss();
					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});

		}

	}

	public void validar() {
		if (this.getFechaSistema() != null && this.getTiempoSistema() != null) {
			if (this.getFechaUsuario() != null) {
				if (this.getTiempoUsuario() != null) {
					self.setProductos(spiProductos.getSelectedItem().toString());
					self.setReferencias(Spireferencia.getSelectedItem()
							.toString());

					if (!etQuienRecibe.getText().toString()
							.equals(STRING_EMPTY)) {

						if (!etNoFactEntMer.equals(STRING_EMPTY)) {

							String NoFactEntMer = this.etNoFactEntMer.getText()
									.toString();
							NoFactEntMer = this.validarcampos
									.DeleteAccents(NoFactEntMer);

							this.setNumFactura(NoFactEntMer);

						} else {
							this.setNumFactura(this.getString(R.string.msjN_A));
						}
						String QuienRecibe = this.etQuienRecibe.getText()
								.toString();
						QuienRecibe = this.validarcampos
								.DeleteAccents(QuienRecibe);
						String LoteDelProducto = this.etLoteDelProducto
								.getText().toString();
						LoteDelProducto = this.validarcampos
								.DeleteAccents(LoteDelProducto);

						this.setQuienRecibe(QuienRecibe);
						this.setLoteDelProducto(LoteDelProducto);
						this.setCantidad(etCantEntMer.getText().toString());
						this.mensajeRegistro();

					} else {

						// error, esta vacio quien recibe
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta, R.string.msjNadieRecibe,
								R.string.btnAceptar);
					}

				} else {
					// hace falta hora
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjSelecHora,
							R.string.btnAceptar);
				}
			} else {
				// hace falta la fecha
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjSelecFecha,
						R.string.btnAceptar);
			}

		}
	}

	public void enviarDatos() {
		Log.i("BuscaClientes", "Entra a la funcion de envio de datos");

		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_REGISTRO_ENTREGA_MERCANCIA);

		try {
			JSONObject dato = new JSONObject();
			dato.put("cantidad", this.getCantidad());
			dato.put("cliente_id", this.getIdDestinatario());
			dato.put("empleado_id", this.getIdOperarioEmpleado());
			dato.put("fecha_sistema", this.getFechaSistema());
			dato.put("fecha_usuario", this.getFechaUsuario());
			dato.put("hora_sistema", this.getTiempoSistema());
			dato.putOpt("hora_usuario", this.getTiempoUsuario());
			dato.put("no_factura", this.getNumFactura());
			dato.put("producto_id", this.idProducto.get(this.getProductos()));
			dato.put("referencia", this.getReferencias());
			dato.put("quien_recibe", this.getQuienRecibe());
			dato.put("lote_del_producto", this.getLoteDelProducto());

			StringEntity entity = new StringEntity(dato.toString());
			post.setHeader("Content-Type", "application/json; chartset=UTF-8");
			post.setHeader("Accept", "application/json");
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			final String respStr = EntityUtils.toString(resp.getEntity());
			Log.w("BuscaClientes",
					"envia datos, y esta apunto de esperar respuesta del serv");

			if (respStr.equals("productonv")) {
				Log.i("BuscaClientes",
						"el servidor me retorno productonv, no puede ser nulo el producto");

				runOnUiThread(new Runnable() {
					public void run() {

						progressDialog.dismiss();
						new AlertDialog.Builder(self)
								.setIcon(android.R.drawable.ic_dialog_alert)
								.setTitle(R.string.tituloAlerta)
								.setMessage(R.string.msjErProductonv)
								.setPositiveButton(R.string.btnAceptar, null)
								.show();

					}
				});

			} else {
				if (respStr.equals("true")) {
					this.setIdOperarioEmpleado(null);
					this.setCantidad(null);
					this.setProductos(null);
					this.setReferencias(null);

					Log.i("BuscaClientes", "esta antes del hilo de msj exitoso");
					// mensaje de respuesta del servidor
					runOnUiThread(new Runnable() {
						public void run() {

							progressDialog.dismiss();
							self.etCantEntMer.setText(null);

							new AlertDialog.Builder(self)
									.setIcon(
											android.R.drawable.checkbox_on_background)
									.setTitle(R.string.msjMuyBien)
									.setMessage(R.string.msjRegistroExitoso)
									.setPositiveButton(R.string.btnAceptar,
											null).show();

							Log.i("BuscaClientes",
									"el servidor me retorno true y esta en el mensaje en pantalla");

						}
					});

				} else if (respStr.equals("cantidadnv")) {

					// mensaje de respuesta del servidor
					runOnUiThread(new Runnable() {
						public void run() {

							progressDialog.dismiss();
							new AlertDialog.Builder(self)
									.setIcon(android.R.drawable.ic_dialog_alert)
									.setTitle(R.string.tituloAlerta)
									.setMessage(R.string.msjErCantidadnv)
									.setPositiveButton(R.string.btnAceptar,
											null).show();

							Log.i("BuscaClientes",
									"el servidor me retorno cantidadnv, no eiste la cantidad de pE en existencia");

						}
					});

				} else {

					Log.w("BuscaClientes",
							"el servidor no retorno respuesta, es necesario verificar si el registro "
									+ "de entrega mercancia se realizo exitosamente");

					runOnUiThread(new Runnable() {
						public void run() {

							progressDialog.dismiss();
							new AlertDialog.Builder(self)
									.setIcon(android.R.drawable.ic_dialog_alert)
									.setTitle(R.string.tituloAlerta)
									.setMessage(R.string.msjErNoRetornaTrue)
									.setPositiveButton(R.string.btnAceptar,
											null).show();

						}
					});

				}
			}

		} catch (Exception e) {
			Log.e("BuscaClientes", "Error: " + e.fillInStackTrace().toString());
			runOnUiThread(new Runnable() {
				public void run() {
					progressDialog.dismiss();
					new AlertDialog.Builder(self)
							.setIcon(android.R.drawable.ic_dialog_alert)
							.setTitle(R.string.tituloError)
							.setMessage(R.string.msjERConexionEnviarEntreMerc)
							.setPositiveButton(R.string.btnAceptar, null)
							.show();

				}
			});
		}
	}

	public void agregarOtro(View v) {

		this.fechaHoraSistema();
		int cant = manejador.validarPh(etCantEntMer);

		if (cant != 0) {
			switch (cant) {
			case 17:
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjCantUnid,
						R.string.btnAceptar);
				break;
			}
		} else {
			this.validar();
		}

	}

	public void goEtapas(View view) {
		Intent intent = new Intent();
		intent.setClass(this, BuscarCliente.class);
		startActivity(intent);
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);

		outState.putString("fecha", this.getDate());
		outState.putString("hora", this.getTime());

	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);

		this.setFechaUsuario(savedInstanceState.getString("fecha"));
		this.setTiempoUsuario(savedInstanceState.getString("hora"));

	}
}